package com.ruoyi.smartcity.anfang.service.impl;

import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.smartcity.anfang.domain.AnfangJiankong;
import com.ruoyi.smartcity.anfang.mapper.AnfangJiankongMapper;
import com.ruoyi.smartcity.anfang.service.IAnfangJiankongService;
import com.ruoyi.smartcity.traffic.vo.EchartsOptionVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 监控管理Service业务层处理
 *
 * @author ruoyi
 * @date 2025-03-09
 */
@Service
public class AnfangJiankongServiceImpl implements IAnfangJiankongService {
    @Autowired
    private AnfangJiankongMapper anfangJiankongMapper;

    /**
     * 查询监控管理
     *
     * @param id 监控管理主键
     * @return 监控管理
     */
    @Override
    public AnfangJiankong selectAnfangJiankongById(Long id) {
        return anfangJiankongMapper.selectAnfangJiankongById(id);
    }

    /**
     * 查询监控管理列表
     *
     * @param anfangJiankong 监控管理
     * @return 监控管理
     */
    @Override
    public List<AnfangJiankong> selectAnfangJiankongList(AnfangJiankong anfangJiankong) {
        return anfangJiankongMapper.selectAnfangJiankongList(anfangJiankong);
    }

    /**
     * 新增监控管理
     *
     * @param anfangJiankong 监控管理
     * @return 结果
     */
    @Override
    public int insertAnfangJiankong(AnfangJiankong anfangJiankong) {
        anfangJiankong.setCreateTime(DateUtils.getNowDate());
        return anfangJiankongMapper.insertAnfangJiankong(anfangJiankong);
    }

    /**
     * 修改监控管理
     *
     * @param anfangJiankong 监控管理
     * @return 结果
     */
    @Override
    public int updateAnfangJiankong(AnfangJiankong anfangJiankong) {
        anfangJiankong.setUpdateTime(DateUtils.getNowDate());
        return anfangJiankongMapper.updateAnfangJiankong(anfangJiankong);
    }

    /**
     * 批量删除监控管理
     *
     * @param ids 需要删除的监控管理主键
     * @return 结果
     */
    @Override
    public int deleteAnfangJiankongByIds(Long[] ids) {
        return anfangJiankongMapper.deleteAnfangJiankongByIds(ids);
    }

    /**
     * 删除监控管理信息
     *
     * @param id 监控管理主键
     * @return 结果
     */
    @Override
    public int deleteAnfangJiankongById(Long id) {
        return anfangJiankongMapper.deleteAnfangJiankongById(id);
    }

    @Override
    public List<Map<String, Object>> deviceType() {
        List<Map<String, Object>> vo = new ArrayList<>();
        List<AnfangJiankong> list = anfangJiankongMapper.selectAnfangJiankongList(new AnfangJiankong());
        // 根据类型分组
        Map<String, Long> groupByType = list.stream().collect(Collectors.groupingBy(AnfangJiankong::getType, Collectors.counting()));
        for (Map.Entry<String, Long> entry : groupByType.entrySet()) {
            Map<String, Object> map1 = new HashMap<>();
            map1.put("name", entry.getKey());
            map1.put("value", entry.getValue());
            vo.add(map1);
        }

        return vo;
    }

    @Override
    public EchartsOptionVO deviceStatus() {
        EchartsOptionVO echartsOptionVO = new EchartsOptionVO();
        List<AnfangJiankong> list = anfangJiankongMapper.selectAnfangJiankongList(new AnfangJiankong());
        Map<String, Long> groupByStatus = list.stream().collect(Collectors.groupingBy(AnfangJiankong::getStatus, Collectors.counting()));
        JSONArray yData = new JSONArray();
        JSONArray xData = new JSONArray();
        for (Map.Entry<String, Long> entry : groupByStatus.entrySet()) {
            xData.add(entry.getKey());
            yData.add(entry.getValue());
        }
        echartsOptionVO.setYData(yData);
        echartsOptionVO.setXData(xData);
        return echartsOptionVO;
    }
}
